#include "Activation.h"

/* Constrói uma função de ativação passando seu tipo e um parâmetro opcional */
Activation::Activation(int type, double param)
{
    this->type = type;
    this->param = param;
}

Activation::~Activation()
{
}

/* Chama a função de ativação correspondente */
double Activation::operator()(double output)
{
    switch(type)
    {
        // Função degrau: f(x) = 1 caso x > 0; f(x) = 0 caso contrário
        case STEP:
            return (output > 0) ? 1 : 0;

            // Função pseudo-linear: f(x) = 1 caso x > 1; f(x) = 0 caso x < 0; f(x) = x caso contrário
        case PSEUDO_LINEAR:
            if(output > 1)
                return 1;
            else if(output <= 0)
                return 0;
            else
                return output;

            // Função sigmóide: f(x) = 1/(1+e^(-c*x))
        case SIGMOID:
            return 1 / (1 + exp(-param * output));

        default:
            return 0;
    }
}

